package edu.upc.cineplanet.repositoryjdbc;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;
import edu.upc.cineplanet.Domain.UsuarioAdmin;
import edu.upc.cineplanet.repository.UsuarioAdminRepository;
 
@Repository
public class UsuarioAdminRepositoryJdbc extends JdbcDaoSupport implements UsuarioAdminRepository  {


	@Autowired	
	public UsuarioAdminRepositoryJdbc(DataSource dataSource){
		setDataSource(dataSource);
	}
	
	public List<UsuarioAdmin> obtenerUsuariosAdmin() {
		
		List<UsuarioAdmin> usuAdmin = new ArrayList<UsuarioAdmin>();
		
		String sql = "SELECT * FROM USUARIO_ADMIN";
		usuAdmin = getJdbcTemplate().query(sql, new UsuarioRowMapper());
		
		return usuAdmin;
	}	
	
	private class UsuarioRowMapper implements ParameterizedRowMapper<UsuarioAdmin>{		
		public UsuarioAdmin mapRow(ResultSet rs, int rowNum) throws SQLException{
			UsuarioAdmin p = new UsuarioAdmin();
			p.setCo_Usuario(rs.getString("Co_Usuario"));
			p.setNo_Usuario(rs.getString("No_Usuario"));
			p.setNo_Apepaterno(rs.getString("No_Apepaterno"));
			p.setNo_Apepaterno(rs.getString("No_Apepaterno"));
			p.setFlg_Estado(rs.getBoolean("Flg_Estado"));
			p.setClave(rs.getString("Clave"));
			p.setNo_Puesto(rs.getString("No_Puesto"));
			p.setNo_Jefe(rs.getString("No_Jefe"));
			return p;		
		}		
	}	
	
	public void crearUsuarioAdmin(UsuarioAdmin usu) {
		usu.setCo_Usuario(creaCodigo(usu));
		String sql_usuario_admin = "insert into USUARIO_ADMIN (Co_usuario,No_Usuario , No_Apepaterno, No_Apematerno , Flg_Estado,No_Puesto,No_Jefe,Clave) " +  
			         		 "values (?,?,?,?,?,?,?,?)";
		getJdbcTemplate().update(sql_usuario_admin,new Object[]{ usu.getCo_Usuario(),usu.getNo_Usuario() ,usu.getNo_Apepaterno(),  
				usu.getNo_Apematerno(), usu.getFlg_Estado(),usu.getNo_Puesto(),usu.getNo_Jefe(),usu.getClave() });					
		
	}
	
	public void eliminarUsuario(UsuarioAdmin usu) {		
		String sql_usuario_admin = "delete from usuario_admin where Co_Usuario=?";		
		getJdbcTemplate().update(sql_usuario_admin, usu.getCo_Usuario());			
	}
	
	public void actualizarUsuario(UsuarioAdmin usua) {
		String sql_usuario_admin = "update usuario_admin set No_Usuario=?,No_Cargo=?,No_Puesto=?, Clave=?, No_Jefe=? where Co_Usuario=?";
		getJdbcTemplate().update(sql_usuario_admin,usua.getNo_Usuario(), usua.getNo_Cargo(),usua.getNo_Puesto() , usua.getClave(), usua.getNo_Jefe(),  usua.getCo_Usuario());
	}	
	
	public boolean busquedaUsuario(UsuarioAdmin usu) throws RuntimeException {
		String codigo = usu.getCo_Usuario();
		Iterator<UsuarioAdmin> itr = obtenerUsuariosAdmin().iterator();		
		while (itr.hasNext()){
		    UsuarioAdmin usua = itr.next();
		    if( usua.getCo_Usuario().equals(codigo) ){
		    	return true;
		    }		    
		}
		return false;		 
	}
	
	public String mostrarUsuarios(){
		String lista="";		
		int registro=1;
		Iterator<UsuarioAdmin> itr = obtenerUsuariosAdmin().iterator();		
		while (itr.hasNext()){
		    UsuarioAdmin usua = itr.next();
		    lista = lista + registro+ " " + usua.getCo_Usuario()+" "+ usua.getNo_Usuario() +" "+ usua.getNo_Apepaterno() +" "+ usua.getNo_Cargo()+" " +usua.getNo_Puesto() +  " " +usua.getClave() +"\n" ;
		    registro++;
		}		
		return lista;
	}
    	
	public String creaCodigo(UsuarioAdmin usu) {
		String codigo = "";
		String nombre = usu.getNo_Usuario();
		String apellido = usu.getNo_Apepaterno();
		codigo = nombre.substring( 0, 3 )+""+ apellido.substring(0,3) ;		
		return codigo;
	}	
	
	public boolean validaUsuarioAdmin(String usuario, String password){
		boolean existe=false;
		String sql = "SELECT  * FROM USUARIO_ADMIN WHERE CO_USUARIO=?";
		UsuarioAdmin usua;
		try{
			usua = getJdbcTemplate().queryForObject(sql, new Object[]{usuario}, new UsuarioRowMapper());			
		}catch(EmptyResultDataAccessException ex){
			return false;
		}		
		if (usua.getClave().equals(password) && usua.getCo_Usuario().equals(usuario) )	existe = true;		
		return existe;		
	}
	
	public UsuarioAdmin ObtenerUsuarioAdmin(String usuario){
		
		String sql = "SELECT  * FROM USUARIO_ADMIN WHERE CO_USUARIO=?";
		UsuarioAdmin usua;
		
		usua = getJdbcTemplate().queryForObject(sql, new Object[]{usuario}, new UsuarioRowMapper());			
							
		return usua;		
	}
	

}